package com.casa_apoio.controller;

import com.casa_apoio.model.dao.LeitoDAO;
import com.casa_apoio.model.entity.Leito;
import com.casa_apoio.util.FacesContextUtil;
import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.faces.context.FacesContext;

@ManagedBean(name = "mbLeito")
@RequestScoped
public class MbLeito implements Serializable {

    private Leito leito = new Leito();
    private List<Leito> leitos;
    private String pesquisa;
    private int totalLeitos;
    private int leitosOcupados;
    private int leitoLivres;
    private int taxaOcupacao;

    private LeitoDAO<Leito> leitoDAO() {
        LeitoDAO<Leito> leitoDAO = new LeitoDAO<Leito>(Leito.class, FacesContextUtil.getRequestSession());
        return leitoDAO;
    }

    public String salvarLeito() {
        if (leito.getIdLeito() == null || leito.getIdLeito() < 1) {
            leitoDAO().salvar(leito);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Gravação efetuada com sucesso!", ""));
        } else {
            leitoDAO().atualizar(leito);
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Alteração efetuada com sucesso!", ""));
        }
        limparLeito();
        return "cadastroLeito.faces";
    }

    public String alterarLeito(Integer idLeito) {
        System.out.println("Entrou no metodo alterar.:" + idLeito);
        pesquisa = null;
        this.leito = leitoDAO().getEntity(idLeito);
        return "cadastroLeito.faces";
    }

    public void pesquisarLeito() {
        System.out.println("Entrou no metodo pesquisar");
        leitos = leitoDAO().pesquisarLeito(pesquisa.toUpperCase());

        System.out.println("Tamanho da lista.:" + leitos.size());
    }

    public String limparLeito() {
        leito = new Leito();
        return null;
    }

    public Leito getLeito() {
        return leito;
    }

    public void setLeito(Leito leito) {
        this.leito = leito;
    }

    public List<Leito> getLeitos() {
        if (leitos == null) {
            leitos = leitoDAO().listaLeito();
        }
        totalLeitos = leitos.size();
        leitoLivres = 0;
        leitosOcupados = 0;
        for (Leito l : leitos) {
            if (l.isOcupado()) {
                leitosOcupados += 1;
            } else {
                leitoLivres += 1;
            }
            taxaOcupacao = ((leitosOcupados) * 100) / totalLeitos;
        }
        return leitos;
    }

    public void setLeitos(List<Leito> leitos) {
        this.leitos = leitos;
    }

    public String getPesquisa() {
        return pesquisa;
    }

    public void setPesquisa(String pesquisa) {
        this.pesquisa = pesquisa;
    }

    public int getTotalLeitos() {
        return totalLeitos;
    }

    public void setTotalLeitos(int totalLeitos) {
        this.totalLeitos = totalLeitos;
    }

    public int getLeitosOcupados() {
        return leitosOcupados;
    }

    public void setLeitosOcupados(int leitosOcupados) {
        this.leitosOcupados = leitosOcupados;
    }

    public int getLeitoLivres() {
        return leitoLivres;
    }

    public void setLeitoLivres(int leitoLivres) {
        this.leitoLivres = leitoLivres;
    }

    public int getTaxaOcupacao() {
        return taxaOcupacao;
    }

    public void setTaxaOcupacao(int taxaOcupacao) {
        this.taxaOcupacao = taxaOcupacao;
    }
}
